package com.demo.demo.hutool;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.Month;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.CreditCodeUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.extra.emoji.EmojiUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * Copyright
 *
 * @Author WuHuang
 * @Date 2022/6/23
 */
public class Demo {
    public static void main(String[] args) {
//        String alias = EmojiUtil.toAlias("😄");
        int a = 1;
        System.out.println(Convert.toStr(a));
        long[] b = { 1, 2, 3, 4, 5 };
        System.out.println(Convert.toStr(b));
        String aa = "2017-05-06";
        Date value = Convert.toDate(aa);
        System.out.println(value);
        //递归遍历目录 FileUtil.loopFiles（）
//        List<File> files = FileUtil.loopFiles();
        // 判断字符串是否为中文字符串
        boolean match = ReUtil.isMatch(ReUtil.RE_CHINESES, "中国人");
        //指定几个组进行切分
//        int numElements = 105; // 指定要生成的元素数量
//        List<Integer> list = IntStream.range(1, numElements).boxed().collect(Collectors.toList());
//        List<List<Integer>> lists = averageAssign(list, 10);
//        System.out.println(lists.size());
//        System.out.println(lists);
    }
    public static void lists(){
        // 新建一个HashSet
        Set<Integer> hashSet = CollUtil.newHashSet(1, 2, 3);
        Set<Integer> linkedHashSet = CollUtil.newLinkedHashSet(4, 2, 3);

        // 两个集合取交集
        Collection<Integer> intersection = CollUtil.intersection(hashSet, linkedHashSet);

        // 两个集合取并集
        Collection<Integer> union = CollUtil.union(hashSet, linkedHashSet);

        // 两个集合取差集
        Collection<Integer> disjunction = CollUtil.disjunction(hashSet, linkedHashSet);

        // 判断一个集合是否为null或空集
        boolean empty = CollUtil.isEmpty(hashSet);

        // 创建一个ArrayList
        List<Integer> arrayList = ListUtil.toList(1, 2, 3);

        // 创建一个LinkedList
        List<Integer> linkedList = ListUtil.toLinkedList(1, 2, 3);

        // 创建一个map
        Map<String, Object> map = MapUtil.<String, Object>builder().put("a", 1).put("b", 2).build();
    }
    /**
     * 常见业务
     */
    public static void uu() throws IOException {
        String idCard = "1111111111111";
        // 根据身份证号获取出生日期
        String birth = IdcardUtil.getBirthByIdCard(idCard);

        // 根据身份证号获取省份
        String province = IdcardUtil.getProvinceByIdCard(idCard);

        // 判断身份证号是否合法
        boolean valid = IdcardUtil.isValidCard18(idCard);

        // 获取一个随机的社会信用代码
        String creditCode = CreditCodeUtil.randomCreditCode();

        // 判断社会信用代码是否合法
        boolean isCreditCode = CreditCodeUtil.isCreditCode(creditCode);

        // 将汉字转为拼音，需要引入TinyPinyin、JPinyin或Pinyin4j的jar包
        String china = PinyinUtil.getPinyin("中国");

        // 将字符串生成为二维码，需要引入com.google.zxing.core的jar包
        BufferedImage qrCodeImage = QrCodeUtil.generate("www.baidu.com", QrConfig.create());
        ImageIO.write(qrCodeImage, "png", new File("a.png"));

        // 生成uuid
        String uuid = IdUtil.fastSimpleUUID();

        // 创建基于Twitter SnowFlake算法的唯一ID，适用于分布式系统
        final Snowflake snowflake = IdUtil.createSnowflake(1, 1);
        final long id = snowflake.nextId();
    }
    public static void dateU(){
        //当前时间
        Date date1 = DateUtil.date();
        //当前时间
        Date date2 = DateUtil.date(Calendar.getInstance());
        //当前时间
        Date date3 = DateUtil.date(System.currentTimeMillis());
        //当前时间字符串，格式：yyyy-MM-dd HH:mm:ss
        String now = DateUtil.now();
        //当前日期字符串，格式：yyyy-MM-dd
        String today= DateUtil.today();
        String dateStr = "2017-03-01";
        Date dates = DateUtil.parse(dateStr);
        Date datess = DateUtil.parse(dateStr, "yyyy-MM-dd");

        Date date = DateUtil.parse(dateStr);
        //结果 2017/03/01
        String format = DateUtil.format(date, "yyyy/MM/dd");
        //常用格式的格式化，结果：2017-03-01
        String formatDate = DateUtil.formatDate(date);
        //结果：2017-03-01 00:00:00
        String formatDateTime = DateUtil.formatDateTime(date);
        //结果：00:00:00
        String formatTime = DateUtil.formatTime(date);

        //一天的开始，结果：2017-03-01 00:00:00
        Date beginOfDay = DateUtil.beginOfDay(date);

        //一天的结束，结果：2017-03-01 23:59:59
        Date endOfDay = DateUtil.endOfDay(date);

        //获得年的部分
        DateUtil.year(date);
        //获得月份，从0开始计数
        DateUtil.month(date);
        //获得月份枚举
        DateUtil.monthEnum(date);

        //结果：2017-03-03 22:33:23
        Date newDate = DateUtil.offset(date, DateField.DAY_OF_MONTH, 2);

        //常用偏移，结果：2017-03-04 22:33:23
        DateTime newDate2 = DateUtil.offsetDay(date, 3);

        //常用偏移，结果：2017-03-01 19:33:23
        DateTime newDate3 = DateUtil.offsetHour(date, -3);

        //昨天
        DateUtil.yesterday();
//明天;
        DateUtil.tomorrow();
//上周;
        DateUtil.lastWeek();
//下周;
        DateUtil.nextWeek();
//上个月;
        DateUtil.lastMonth();
//下个月;
        DateUtil.nextMonth();
        String dateStr1 = "2017-03-01 22:33:23";
        Date date5 = DateUtil.parse(dateStr1);

        String dateStr2 = "2017-04-01 23:33:23";
        Date date4 = DateUtil.parse(dateStr2);

        //相差一个月，31天
        long betweenDay = DateUtil.between(date5, date4, DateUnit.DAY);
// "摩羯座"
        String zodiac = DateUtil.getZodiac(Month.JANUARY.getValue(), 19);

// "狗"
        String chineseZodiac = DateUtil.getChineseZodiac(1994);

        Date endDay = DateUtil.parse("2022-03-04 23:09:09", DatePattern.NORM_DATETIME_FORMAT);
        int hour = DateUtil.hour(endDay, false);
        System.out.println(hour);

    }

    /**
     *  指定几个组进行切分
     * 将一个list 均分成 n 个list,主要通过偏移量来实现的
     * @param source
     * @return
     */
    public static <T> List<List<T>> averageAssign(List<T> source, int n) {
        List<List<T>> result=new ArrayList<List<T>>();
        int remaider=source.size()%n;  //(先计算出余数)
        int number=source.size()/n;  //然后是商
        int offset=0;//偏移量

        for(int i=0;i<n;i++){
            List<T> value=null;
            if(remaider>0){
                value=source.subList(i*number+offset, (i+1)*number+offset+1);
                remaider--;
                offset++;
            }else{
                value=source.subList(i*number+offset, (i+1)*number+offset);
            }
            result.add(value);
        }
        return result;
    }
}
